#include "wxsframeres.h"
#include "wxsitemresdata.h"
#include "wxsflags.h"
#include <wx/button.h>

using namespace wxsFlags;

namespace {
  class wxsFrameResPreview: public wxFrame {
    public:

      wxsFrameResPreview( M_Code_unused wxWindow* Parent, wxsItemResData* Data ): m_Data( Data ) {
        m_Data->GetRootItem()->BuildPreview( this, pfExact );
        wxAcceleratorEntry Acc[1];
        Acc[0].Set( wxACCEL_NORMAL, WXK_ESCAPE, wxID_EXIT );
        wxAcceleratorTable Table( 1, Acc );
        SetAcceleratorTable( Table );
      }

      ~wxsFrameResPreview() {
        m_Data->NotifyPreviewClosed();
      }

      void OnEscape( M_Code_unused wxCommandEvent& event ) {
        Close();
      }

      void OnClose( M_Code_unused wxCloseEvent& event ) {
        Destroy();
      }

      void OnButton( wxCommandEvent& event ) {
        wxWindowID Id = event.GetId();
        if( Id == wxID_OK  ||
            Id == wxID_APPLY ||
            Id == wxID_CANCEL ) {
          Close();
        }
      }

      wxsItemResData* m_Data;

      DECLARE_EVENT_TABLE()
  };

  BEGIN_EVENT_TABLE( wxsFrameResPreview, wxFrame )
    EVT_MENU( wxID_EXIT, wxsFrameResPreview::OnEscape )
    EVT_CLOSE( wxsFrameResPreview::OnClose )
    EVT_BUTTON( wxID_ANY, wxsFrameResPreview::OnButton )
  END_EVENT_TABLE()
}

const wxString wxsFrameRes::ResType = _T( "wxFrame" );

wxString wxsFrameRes::OnGetAppBuildingCode() {
  return wxString::Format( _T( "\t%s* Frame = new %s(0);\n" )
                           _T( "\tFrame->Show();\n" )
                           _T( "\tSetTopWindow(Frame);\n" ),
                           GetResourceName().c_str(),
                           GetResourceName().c_str() );
}

wxWindow* wxsFrameRes::OnBuildExactPreview( wxWindow* Parent, wxsItemResData* Data ) {
  wxFrame* Frm = new wxsFrameResPreview( Parent, Data );
  Frm->Show();
  return Frm;
}
